home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / russell / gc.lha / gc_headers.h < prev    next >
C/C++ Source or Header  |  1992-04-03  |  1KB  |  36 lines

  1. /* 
  2.  * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
  3.  * Copyright (c) 1991, 1992 by Xerox Corporation.  All rights reserved.
  4.  *
  5.  * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
  6.  * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
  7.  *
  8.  * Permission is hereby granted to copy this garbage collector for any purpose,
  9.  * provided the above notices are retained on all copies.
  10.  */
  11. # ifndef GC_HEADERS_H
  12. # define GC_HEADERS_H
  13. typedef struct hblkhdr hdr;
  14.  
  15. # define LOG_TOP_SZ 11
  16. # define LOG_BOTTOM_SZ (WORDSZ - LOG_TOP_SZ - LOG_HBLKSIZE)
  17. # define TOP_SZ (1 << LOG_TOP_SZ)
  18. # define BOTTOM_SZ (1 << LOG_BOTTOM_SZ)
  19.  
  20. # define MAX_JUMP (HBLKSIZE - 1)
  21.  
  22. extern hdr ** GC_top_index [];
  23.  
  24. # define HDR(p) (GC_top_index \
  25.         [(unsigned long)(p) >> (LOG_BOTTOM_SZ + LOG_HBLKSIZE)] \
  26.         [((unsigned long)(p) >> LOG_HBLKSIZE) & (BOTTOM_SZ - 1)])
  27.                 
  28. /* Is the result a forwarding address to someplace closer to the    */
  29. /* beginning of the block or NIL?                    */
  30. # define IS_FORWARDING_ADDR_OR_NIL(hhdr) ((unsigned long) (hhdr) <= MAX_JUMP)
  31.  
  32. /* Get an HBLKSIZE aligned address closer to the beginning of the block */
  33. /* h.  Assumes hhdr == HDR(h) and IS_FORWARDING_ADDR(hhdr).        */
  34. # define FORWARDED_ADDR(h, hhdr) ((struct hblk *)(h) - (unsigned long)(hhdr))
  35. # endif /*  GC_HEADERS_H */
  36.